package pers.zxk.jlytnews.util;

import net.sf.json.JSONObject;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CommonUtil {
    /**
     * 保存图片文件并返回图片的url地址
     * 将图片保存在 Constants.UPLOADS_FOLDER 路径下，
     * 使用日期作为文件名
     *
     * @param part
     * @return
     * @throws IOException
     */
    public static String saveImage(Part part) throws IOException {
        String filePath = getRootPath() + Constants.UPLOADS_IMAGE_FOLDER;
        //判断文件夹是否存在
        File file = new File(filePath);
        if (!file.exists()) {
            file.mkdirs();
        }

        // 使用日期作为保存文件的名称fileName
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String submittedFileName = part.getSubmittedFileName();
        String ext = submittedFileName.substring(submittedFileName.length() - 4);
        String fileName = dateFormat.format(new Date()) + ext;

        // 将文件保存到项目下的uploads文件夹下
        part.write(filePath + fileName);

        //String url = Constants.BASE_URL + Constants.UPLOADS_IMAGE_FOLDER + fileName;
        String url = Constants.BASE_URL + Constants.PROJECT_NAME + Constants.UPLOADS_IMAGE_FOLDER + fileName;
        return url;
    }

    /**
     * 将url转为服务器磁盘路径.
     * eg：https://81.70.104.45/JLYTNews_war/uploads/images/201027140800.jpg
     * =>tomcat根目录/uploads/images/201027140800.jpg
     *
     * @param url
     * @return 转换失败返回null
     */
    public static String urlToPath(String url) {
        if (url == null) {
            return null;
        }
        //去掉url中项目名称
        String realPath = null;
        if (url.contains(Constants.BASE_URL + Constants.PROJECT_NAME)) {
            realPath = url.replace(Constants.BASE_URL + Constants.PROJECT_NAME, getRootPath());
        }
        return realPath;
    }

    /**
     * 获取Tomcat根路径
     *
     * @return
     */
    public static String getRootPath() {
        /*1.通过环境变量获取
        Map m = System.getenv();
        System.out.println(m.get("CATALINA_HOME"));
        2.通过打开tomcat的方法获取到的相对路径*/
        return System.getProperty("catalina.home");
    }

    /**
     * 向客户端发送json数据
     *
     * @param resp      response
     * @param data      数据
     * @param errorCode 错误代码： 0-正常；1-错误
     * @param errorMsg  错误信息
     * @param <T>
     * @throws IOException
     */
    public static <T> void sendJsonData(HttpServletResponse resp, T data, int errorCode, String errorMsg) {
        //将数据封装为json类型
        JSONObject obj = new JSONObject();
        obj.put("data", data);
        obj.put("errorCode", errorCode);
        obj.put("errorMsg", errorMsg);

        //向客户端发送数据
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = null;
        try {
            out = resp.getWriter();
        } catch (IOException e) {
            e.printStackTrace();
        }
        out.println(obj);
    }


    /**
     * 日期（Date）转字符串 "yyyy-MM-dd hh:mm:ss"
     *
     * @param date
     * @return
     */
    public static String DateToStr(Date date) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return format.format(date);
    }

    /**
     * 字符串转日期
     *
     * @param date
     * @return
     * @throws ParseException
     */
    public static Date StrToDate(String date) throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        return format.parse(date);
    }
}
